﻿# -*- coding: utf-8 -*-
import unittest
from uiautomator import Device
#导入HTMLTestRunner用来执行用例，生成报告
from Public import HTMLTestRunner
import sys
import time
import os


class Runcase(object):
    
    idid = ''
    d = Device('%s'%(idid))
    print('尝试正在连接手机')
    print(d.info)

    def run(self):
        #这里导入想要执行的用例库
        #CaseName=raw_input('请输入用例名(不带py后缀)：')
        #调试用：
        CaseName='Test_Case1'
        try:
            #取当前脚本所在目录：例如"d:\automation"
            path = os.path.split(os.path.realpath(__file__))[0]
            #判断环境中有没有加入Testcase目录，用以导入CASE
            if not "%s\\TestCase"%path in sys.path:
                #如果没找到的话就在环境中添加Testcase目录
                sys.path.append("%s\\TestCase"%path)
            #检查有没有加载用例模块
            if not CaseName in sys.modules:
                #将用例模块导入，就可以操作CASE了，例如：print CASE.Case.N
                print('正在导入用例')
                CASE = __import__(CaseName)
                print('Success')
        except:
            print('导入失败')
        time.sleep(200)
        #Remove=raw_input('输入不跑的case(用空格分开,全跑直接回车)：')
        Remove=''
        if Remove=='':
            print('用例全跑，不做处理')
            Remove=[None]
        else:
            print('处理')
            Remove=Remove.split(' ')
            for k in range(len(Remove)):
                Remove[k]=int(Remove[k])
            print '不跑用例：',Remove


        #获取用例数量
        #通过用例里手动标记的数量来获取，请确保数量的准确
        #2017.3.1
        #修改了获取用例数量的办法
        #采用类的__dict__属性
        #用例class中还有两个其他属性'__module__''__doc__'
        #所以要-2
        #请每个用例都检查一下数量是否正确
        print('获取用例数量')
        N = len(CASE.Case.__dict__)-2
        #print CASE.Case.__dict__
        #print N
        print('用例数量为：%d'%N)
        
        print('开始执行用例')
        testunit = unittest.TestSuite()
        #按顺序添加用例
        for a in range(N):
            if Remove.count(a+1)==1:
                pass
            else:
                testunit.addTest(CASE.Case("Test%d"%(a+1)))

        #输出报告的目录
        #获取当前时间，检查是否存在当前日期的目录，没有则新建一个当前年月日命名的文件夹

        #获取当前时间，t用作文件的命名，day用作文件夹的命名
        t=time.strftime("%Y-%m-%d-%H-%M-%S")
        day=time.strftime("%Y-%m-%d")+'\\'
        #获取当前脚本的目录
        path = os.path.split(os.path.realpath(__file__))[0]
        #把path变成存放报告的目录
        path = path+'\\'+'Result\\'
        #判断是否存在文件夹
        if os.path.exists(path+day)==False:
            print('新建报告文件夹')
            os.mkdir(r'%s%s'%(path,day))

        print('报告件夹为：'+path+day)
        path=path+day
        #以t命名报告文件
        filename='%sAndroid_%s.html'%(path,t)
        fp=open(filename,'wb')
        runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'自动化测试报告',
                                             description=u'手机ID：%s.自动化测试报告\n'%ID[0])
        print('正在执行...')
        runner.run(testunit)
        time.sleep(1)
        print('执行完毕')

if __name__ == '__main__':

    runn = Runcase()
    runn.idid = '4d00b50cebd6400d'
    runn.run()
    pass